#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    int n, m, q;
    cin >> n >> m >> q;

    vector<vector<int>> arr(n+1, vector<int>(m+1));
    vector<vector<long long>> dp(n+1, vector<long long>(m+1));

    //输入数据
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> arr[i][j];

    //构建前缀和数组
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1];

    //使用前缀和数组
    while(q--)
    {
        int x1,x2,y1,y2;
        cin >> x1 >> y1 >> x2 >> y2;
        cout << dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1]<<endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")


class Solution {
public:
    int pivotIndex(vector<int>& nums) 
    {
        int n = nums.size();
        vector<int> f(n),g(n);
        //构建前缀和数组和后缀和数组
        //边界情况f[0]、g[n-1]
        for(int i = 1; i < n; i++)
        {
            f[i] = f[i-1] + nums[i-1];
        }
        for(int i = n-2; i >= 0; i--)
        {
            g[i] = g[i+1] + nums[i+1];
        }

        for(int i = 0; i < n; i++)
        {
            if(f[i] == g[i])
                return i;
        }
        return -1;
    }
};